﻿using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace GioHangViet.Models
{
    [Table("Orders")]
    public class Order
    {
        /// <summary>
        /// Mã hóa đơn sẽ được hiển thị cho người dùng theo:
        /// HD 001 
        /// không cho phép chỉnh sửa.
        /// </summary>
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        [Display(ResourceType = typeof(Resources.Displaies), Name = "DisplayOrderId")]
        public int Id { get; set; }

        [Required(ErrorMessageResourceName = "ErrorOrderCreateDate")]
        [DataType(DataType.DateTime, ErrorMessageResourceName = "ErrorOrderCreateDateDataType", ErrorMessageResourceType = typeof(Resources.Error))]
        [Display(ResourceType = typeof(Resources.Displaies),  Name = "DisplayOrderCreateDate")]
        public DateTime CreateDate { get; set; }

        /// <summary>
        /// Trạng thái đơn hàng:
        /// Nếu PaymentType = 1: thanh toán qua chuyển khoản ngân hàng thì
        /// 0: Đang chờ thanh toán.
        /// 1: Đã thanh toán.
        /// 2: Đã giao hàng thành công.
        /// 
        /// Nếu PaymentType = 0: thanh toán trực tiếp:
        /// 0: Đang chờ giao hàng.
        /// 1: ----------------------
        /// 2: Đã giao hàng thành công.
        /// </summary>
        [DefaultValue(0)]
        [Required(ErrorMessageResourceName = "ErrorOrderStatus", ErrorMessageResourceType = typeof(Resources.Error))]
        [Display(ResourceType = typeof(Resources.Displaies), Name = "DisplayOrderStautus")]
        public byte Status { get; set; }

        [Required(ErrorMessageResourceName = "ErrorOrderUserName", ErrorMessageResourceType = typeof(Resources.Error))]
        [Display(ResourceType = typeof(Resources.Displaies), Name = "DisplayOrderUserName")]
        public string UserName { get; set; }

        [Display(ResourceType = typeof(Resources.Displaies), Name = "DisplayOrderTotalPrice")]
        public decimal TotalPrice { get; set; }

        /// <summary>
        /// Kiểu thanh toán.
        /// 0: Thanh toán trực tiếp.
        /// 1: Thanh toán qua chuyển khoản.
        /// </summary>
        [Required(ErrorMessageResourceName = "ErrorOrderPaymentType", ErrorMessageResourceType = typeof(Resources.Error))]
        [Display(ResourceType = typeof(Resources.Displaies), Name = "DisplayOrderPaymentType")]
        public byte PaymentType { get; set; }

        [Display(ResourceType = typeof(Resources.Displaies), Name = "DisplayOrderCompleteDate")]
        public DateTime CompleteDate { get; set; }

        /// <summary>
        /// Địa chỉ nhận hàng. 
        /// Nếu user chọn gửi hàng cho người khác thì bắt buộc user nhập địa chỉ của người nhận
        /// Nếu user chọn gửi hàng cho chính tải khoản đó thì kiểm tra nếu user đã nhập địa chỉ
        /// thì load lên để user kiểm tra.
        /// Nếu user chưa nhập địa chỉ khi đăng ký thì cho phép user nhập địa chỉ của mình và hỏi
        /// user có muốn cập nhật địa chỉ này cho những lần mua hàng sau không?
        /// Nếu user đồng ý thì thêm vào phần địa chỉ trong bảng UserName
        /// </summary>
        [Required(ErrorMessageResourceName = "ErrorOrderAddress", ErrorMessageResourceType = typeof(Resources.Error))]
        [Display(ResourceType = typeof(Resources.Displaies), Name = "DisplayOrderAddress")]
        public string Address { get; set; }

        /// <summary>
        /// Số điện thoại người nhận hàng.
        /// Số điện thoại này sẽ được load lên từ csdl của bảng UserName nếu user có thay đổi thì 
        /// Hỏi User có muốn cập nhật lại số điện thoại cho mình hay không?
        /// Nếu user đồng ý thì thực hiện cập nhật số điện thoại vào bảng UserName.
        /// </summary>
        [Required(ErrorMessageResourceName = "ErrorOrderPhoneNumber", ErrorMessageResourceType = typeof(Resources.Error))]
        [Display(ResourceType = typeof(Resources.Displaies), Name = "DisplayOrderPhoneNumber")]
        public string PhoneNumber { get; set; }

        /// <summary>
        /// Tên người nhận hàng.
        /// Mặc định lấy họ và tên mà user đã đăng ký và vẫn cho phép sửa.
        /// </summary>
        [Required(ErrorMessageResourceName = "ErrorOrderReceiverName", ErrorMessageResourceType = typeof(Resources.Error))]
        [Display(ResourceType = typeof(Resources.Displaies), Name = "DisplayOrderReceiverName")]
        public string ReceiverName { get; set; }

        
    }
}